package love.server.ui;

import java.util.ArrayList;

import love.model.Carte;
import love.model.Joueur;
import love.ui.images.ImageLoader;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.layout.FillLayout;

public class PlayerComposite extends Group {

	private Joueur joueur;
	private Text textDerniereCarteJouee;
	private Text textCartesEnMain;
	private Text textCartesPosees;
	private Text textNbBisoux;
	
	private boolean playing = false;
	private Label labelInfos;
	private Canvas canvasDefausse;
	
	public PlayerComposite(Composite parent, int style) {
		super(parent, SWT.BORDER);
		setText("Empty slot");
		setLayout(new GridLayout(2, false));
		
		labelInfos = new Label(this, SWT.WRAP | SWT.CENTER);
		labelInfos.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
		labelInfos.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1));
		
		canvasDefausse = new Canvas(this, SWT.NONE);
//		canvasDefausse.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
		canvasDefausse.setLayout(new FillLayout(SWT.HORIZONTAL));
		canvasDefausse.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
		canvasDefausse.setSize(300, 300);
		canvasDefausse.addPaintListener(new PaintListener() {
			  public void paintControl(PaintEvent e) {
				  if(joueur == null)
					  return;
				  int offsetX=1;
				  synchronized (joueur.getCartesPosees()) {
					  ArrayList<Carte> cartesDuJoueur = (ArrayList<Carte>) joueur.getCartesPosees().clone();
					  for(Carte carte: cartesDuJoueur){
						  e.gc.drawImage(ImageLoader.registry.get(""+carte.getType()), offsetX*40, 5);
						  offsetX++;
					  }
				  }
			  }
		});
		
		Label lblDernireCarteJoue = new Label(this, SWT.NONE);
		lblDernireCarteJoue.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		lblDernireCarteJoue.setText("Derni\u00E8re carte jou\u00E9e: ");
		
		textDerniereCarteJouee = new Text(this, SWT.BORDER);
		textDerniereCarteJouee.setEditable(false);
		textDerniereCarteJouee.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
		
		Label lblCartesEnMain = new Label(this, SWT.NONE);
		lblCartesEnMain.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		lblCartesEnMain.setText("Cartes en main: ");
		
		textCartesEnMain = new Text(this, SWT.BORDER);
		textCartesEnMain.setEditable(false);
		textCartesEnMain.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
		
		Label lblCartesPoses = new Label(this, SWT.NONE);
		lblCartesPoses.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		lblCartesPoses.setText("Cartes pos\u00E9es: ");
		
		textCartesPosees = new Text(this, SWT.BORDER);
		textCartesPosees.setEditable(false);
		textCartesPosees.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
		
		Label lblNewLabel = new Label(this, SWT.NONE);
		lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		lblNewLabel.setText("Nombre de bisoux: ");
		
		textNbBisoux = new Text(this, SWT.BORDER);
		textNbBisoux.setEditable(false);
		textNbBisoux.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
	}

	public Joueur getJoueur() {
		return joueur;
	}

	public void setJoueur(Joueur joueur) {
		this.joueur = joueur;
		update();
	}

	public boolean isPlaying() {
		return playing;
	}

	public void setPlaying(boolean playing) {
		this.playing = playing;
	}

	@Override
	protected void checkSubclass() {
	}
	
	@Override
	public void update() {
		super.update();
		if(joueur != null){
			setText((playing ? "**": "")+joueur.getNom()+" ("+joueur.getNum()+")"+(playing ? "**": ""));
			
			if(joueur.isMort()){
				setBackground(new Color(getDisplay(), 255, 50, 50));
			}
			else if(isPlaying()){
				setBackground(new Color(getDisplay(), 100, 255, 100));
			}
			else{
				setBackground(new Color(getDisplay(), 240, 240, 240));
			}
			
			String cartesEnMain = "";
			for(Carte carte: joueur.getCartesEnMain()){
				cartesEnMain += carte.getNom()+" "; 
			}
			textCartesEnMain.setText(cartesEnMain);
			
			String cartesPosees = "";
			for(Carte carte: joueur.getCartesPosees()){
				cartesPosees += carte.getNom()+" "; 
			}
			textCartesPosees.setText(cartesPosees);
			textNbBisoux.setText(""+joueur.getSendedLetters());
			labelInfos.setText(""+joueur.getEtat());
			labelInfos.pack();
//			canvasDefausse.pack();
			
//			layout();
		}
	}
}
